
package com.flyqiu.common.tools;

import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSONArray;

import java.util.List;

/**
 * 提供一系列字符串操作的工具类
 */
public class StringTools {

    /**
     * 判断给定的字符序列是否为空
     *
     * @param str 待判断的字符序列
     * @return 如果字符序列为空或者为null，则返回true，否则返回false
     */
    public static boolean isEmpty(CharSequence str) {
        return str == null || str.isEmpty();
    }

    /**
     * 判断给定的字符串是否不为空
     *
     * @param str 待判断的字符串
     * @return 如果字符串不为空，则返回true，否则返回false
     */
    public static boolean isNotEmpty(String str) {
        return !isEmpty(str);
    }

    /**
     * 判断给定的所有字符序列是否都为空白
     *
     * @param charSequence 待判断的字符序列数组
     * @return 如果所有字符序列都为空或者为null，则返回true，至少有一个字符序列不为空白则返回false
     */
    public static boolean isAllBlank(CharSequence... charSequence) {
        if (charSequence == null || charSequence.length < 1) {
            return true;
        }
        for (final CharSequence cs : charSequence) {
            if (isNotBlank(cs)) {
                return false;
            }
        }
        return true;
    }

    /**
     * 将给定的字符序列转换为驼峰命名法
     *
     * @param name 待转换的字符序列
     * @return 转换后的驼峰命名法字符序列
     */
    public static String toCamelCase(CharSequence name) {
        return StrUtil.toCamelCase(name, '_');
    }

    /**
     * 判断给定的字符串是否为空白
     *
     * @param str 待判断的字符串
     * @return 如果字符串为空或者为null，或者仅包含空白字符，则返回false，否则返回true
     */
    public static boolean isBlank(String str) {
        if (isEmpty(str)) {
            return false;
        }
        return str.isBlank();
    }

    /**
     * 判断给定的字符序列是否不为空白
     *
     * @param str 待判断的字符序列
     * @return 如果字符序列不为空、不为null且不包含空白字符，则返回true，否则返回false
     */
    public static boolean isNotBlank(CharSequence str) {
        if (isEmpty(str)) {
            return false;
        }
        return !StrUtil.isBlank(str);
    }

    /**
     * 将JSON字符串转换为指定类型的列表
     *
     * @param jsonArray JSON字符串
     * @param clazz 目标类型
     * @param <T> 目标类型泛型
     * @return 转换后的目标类型列表
     */
    public static <T> List<T> toList(String jsonArray, Class<T> clazz) {
        return JSONArray.parseArray(jsonArray, clazz);
    }

}